<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //1. 原型 ：显示原型 构造函数   隐式原型是对象的；
      // 不管是显示原型还是隐式原型 都是对象类型；

      //   function Perosn() {
      //     this.name = "张三";
      //   }
      //   console.log(typeof Perosn.prototype);

      //   let obj = {
      //     name: "张三",
      //   };

      //   console.log(typeof obj.__proto__);

      // 原型是对象  ，每个对象又会有隐式原型 ------》Object.prototype
      // console.log(Object.prototype.prototype);

      //2. 一个对象有自身和原型链上的内容共同构成 ；
      // 给所有的对象的原型上都加上了age；
      // for in 循环会循环原型链上的所有内容；
      //   Object.prototype.age = 20;

      //   let obj = {
      //     name: "张三",
      //   };

      //   Object.setPrototypeOf(obj, {
      //     height: "178cm",
      //   });

      //   //   console.log(obj);
      //   //   console.log(obj.name);
      //   //   console.log(obj.height);
      //   //   console.log(obj.age);

      //   for (let key in obj) {
      //     console.log(key);
      //   }

      // 3.判断某个对象 在原型链上是否和某个构造函数有关系；instanceof
      // instanceof： 这个对象 和原型链上的构造函数是否有关系；

      function Person() {
        this.name = "张三";
      }

      let zhangsan = new Person();
      console.log(zhangsan instanceof Person);
      console.log(zhangsan instanceof Object);

      let arr = new Array();
      let obj = {};
      // console.log(obj instanceof Object);
      console.log(arr instanceof Array);

      // 4.原型链上的查找规则 ；就近原则 ；
      // 如果遇到相同的属性和方法 先会查找自身 ，然后再查找原型 ，最后再查找原型链 ，如果都没找到 就返还undefined；
      // let obj = {
      //     age:20
      // }
      // Object.setPrototypeOf(obj,{age:30});
      // Object.prototype.age = 40;

      // console.log(obj.age);

      // function Person(){
      //     // this.age = 20;
      // }

      // // Person.prototype.age = 30;

      // let zhangsan = new Person();
      // console.log(zhangsan.age);
    </script>
  </body>
</html>
